package com.IC.base.controller;

import com.IC.base.service.ActualTenementService;
import IC.common.core.domain.R;
import com.IC.domain.dto.ActualTenementDTO;
import com.IC.domain.po.ActualEquipmentPO;
import com.IC.domain.po.ActualTenementPO;
import com.IC.domain.vo.ActualTenementVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/tenement")
public class ActualTenementController {

    @Autowired
    private ActualTenementService actualTenementService;
    @Autowired
    private RedisTemplate<String, Object> baseRedisTemplate;

    /**
     * 根据小区id查询实有房屋
     * @param id
     * @return
     */
    @GetMapping("/findByPlotIdList")
    public R findByPlotIdList(@RequestParam(value = "id", required = false) Long id) {
        List<ActualTenementVO> list = actualTenementService.findByPlotIdList(id);
        return R.ok(list);
    }

    /**
     * 查询实有房屋数据，存入es
     */
    @GetMapping("/all")
    public R all() {
        List<ActualTenementVO> list = actualTenementService.all();
        return R.ok(list);
    }

    /**
     * 添加实有房屋
     * @param actualTenementDTO
     * @return
     */
    @PostMapping("/add")
    public R add(@RequestBody ActualTenementDTO actualTenementDTO) {
        actualTenementService.add(actualTenementDTO);
        refreshCache();
        return R.ok();
    }

    /**
     * 删除房屋
     * @param id
     * @return
     */
    @GetMapping("/delete/{id}")
    public R delete(@PathVariable("id") Long id) {
        actualTenementService.removeById(id);
        refreshCache();
        return R.ok();
    }

    /**
     * 修改房屋信息
     * @param actualTenementPO
     * @return
     */
    @PostMapping("/update")
    public R update(@RequestBody ActualTenementPO actualTenementPO) {
        actualTenementService.updateById(actualTenementPO);
        refreshCache();
        return R.ok();
    }


    @GetMapping("/list")
    public R list() {
        List<ActualTenementPO> list = (List<ActualTenementPO>) baseRedisTemplate.opsForValue().get("ActualTenementList");
        if(list==null){
            list = actualTenementService.list();
            baseRedisTemplate.opsForValue().set("ActualTenementList",list);
        }
        return R.ok(list);
    }

    @GetMapping("/findByPlotId/{id}")
    public R findByPlotId(@PathVariable Long id){
//        List<ActualTenementPO> byId = (List<ActualTenementPO>) baseRedisTemplate.opsForValue().get("findByPlotId");
//        if(byId==null){
//            byId = actualTenementService.findByPlotId(id);
//            baseRedisTemplate.opsForValue().set("findByPlotId",byId);
//        }
        List<ActualTenementPO> byId= actualTenementService.findByPlotId(id);
        return R.ok(byId);
    }

    @GetMapping("/findById/{id}")
    public R findById(@PathVariable Long id){
        List<ActualTenementPO>  byId= actualTenementService.findById(id);
        return R.ok(byId);
    }

    @PostMapping("/addPopulation")
    public R addPopulation(@RequestBody ActualTenementVO actualTenemeuntPO){
        actualTenementService.addPopulation(actualTenemeuntPO);
        return R.ok();
    }


    private void cacheAllData() {
        List<ActualTenementPO> list = actualTenementService.list();
        baseRedisTemplate.opsForValue().set("Tenement", list);
    }

    @Scheduled(fixedRate = 10000) // 每10秒执行一次
    public void refreshCache() {
        cacheAllData();
    }

}
